#include <inttypes.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <semaphore.h>
#include <setjmp.h>

sigjmp_buf env;
void sig(int sig)
{
	psignal(sig, "hello");
}

void rtsig(int sig, siginfo_t *info, void *nuse)
{
	psiginfo(info, "debuf info");
}

int main()
{
	// printf("queue rt signal:%ld\n", sysconf(_SC_SIGQUEUE_MAX));
	signal(SIGUSR1, sig);
	struct sigaction act, preact;
	act.sa_flags = SA_SIGINFO | SA_RESTART;
	sigemptyset(&act.sa_mask);
	act.sa_sigaction = rtsig;
	sigaction(SIGRTMIN + 1, &act, &preact);

	// act.sa_flags = SA_RESTART;
	// sigemptyset(&act.sa_mask);
	// act.sa_handler = sig;
	// sigaction(SIGUSR1, &act, &preact);

	sigset_t sigset, curset;
	sigfillset(&sigset);
	sigprocmask(SIG_SETMASK, &sigset, NULL);

	siginfo_t sinfo;
	sigemptyset(&curset);
	for (;;) {
		// int sig = sigwaitinfo(&sigset, &sinfo);
		// psignal(sig, "recv:");
		// psiginfo(&sinfo, "recv:");
		sigsuspend(&curset);
		psiginfo(&sinfo, "recv proc:");
	}

	return 0;
}